home *** CD-ROM | disk | FTP | other *** search
/ PC Media 4 / PC MEDIA CD04.iso / share / prog / res104 / source / resource.h < prev   
Encoding:
C/C++ Source or Header  |  1994-08-30  |  2.2 KB  |  97 lines

  1. #if !defined (RESOURCEdotH)
  2. #define RESOURCEdotH
  3.  
  4.  
  5. #include "file.h"
  6. #include "portable.h"
  7.  
  8.  
  9. //*****
  10. //***** Structures used by the Resource class.
  11. //*****
  12.  
  13. #if defined(__TURBOC__)
  14.   #pragma option -a-
  15. #elif defined(_MSC_VER) || defined(__WATCOM__)
  16.   #pragma pack(1)
  17. #elif defined(__ZTC__)
  18.   #pragma ZTC align 1
  19. #elif defined(__GNUC__)
  20. #else
  21.   #error Insert byte-aligning #pragma here.
  22. #endif
  23.  
  24. struct FileHeader
  25. {
  26. #if defined(__GNUC__)
  27.   char filename[13] __attribute__ ((packed));
  28.   biguint fileSize __attribute__ ((packed));
  29.   biguint fileOffset __attribute__ ((packed));
  30. #else
  31.   char filename[13];
  32.   biguint fileSize;
  33.   biguint fileOffset;
  34. #endif
  35. };
  36.  
  37. #if defined(__TURBOC__)
  38.   #pragma option -a.
  39. #elif defined(_MSC_VER) || defined(__WATCOM__)
  40.   #pragma pack()
  41. #elif defined(__ZTC__)
  42.   #pragma ZTC align
  43. #elif defined(__GNUC__)
  44. #else
  45.   #error Insert normal-aligning #pragma here.
  46. #endif
  47.  
  48.  
  49. struct FileEntry
  50. {
  51.   struct FileHeader header;
  52.   int addedFlag;
  53.   char *sourceFilename;
  54.   bigint curOff;
  55.   FileEntry *prev, *next;
  56.   FileEntry(char *filename);
  57.   FileEntry(void);
  58.   ~FileEntry(void);
  59. };
  60.  
  61.  
  62. //*****
  63. //***** Resource file manipulation class.
  64. //*****
  65.  
  66. class Resource
  67. {
  68.   File resFile;
  69.   char resFilename[80];
  70.   FileEntry *listBase;
  71.   unsigned short maxFile;
  72.   int changedFlag, numErrors, resExists;
  73. public:
  74.   Resource(void);
  75.   ~Resource(void);
  76.   int open(char *filename);
  77.   void add(char *filename);
  78.   void del(char *filename);
  79.   int extract(char *filename, char *outputPath=NULL);
  80.   void _far *load(char *file, void _far *buf=NULL, biguint numBytes=0,
  81.         bigint startOff=-1);
  82.   int seek(char *filename, bigint offset, int whence);
  83.   int rewind(char *filename)    { return (seek(filename,0,0));        }
  84.   biguint fileSize(char *filename);
  85.   int exists(void)              { return (resExists);                 }
  86.   int status(void)              { return (numErrors); numErrors=0;    }
  87.   int pack(void);
  88.   FileEntry *getFileList(void)  { return (listBase);                  }
  89. private:
  90.   void killFileList(void);
  91.   int appendFile(char *sourceFilename, File *destFile);
  92.   int appendFile(File *sourceFile, biguint bytes, File *destFile);
  93. };
  94.  
  95.  
  96. #endif
  97.